持續(xù)流程對(duì)于DevOps 和敏捷開(kāi)發(fā)至關(guān)重要。這些方法使團(tuán)隊(duì)能夠以極快的速度和準(zhǔn)確性發(fā)布功能、更新和修復(fù)。然而,由于某些相似性,不同連續(xù)過(guò)程之間的界限往往是模糊的。本文指出了持續(xù)集成(CI)、持續(xù)交付(CD)和持續(xù)部署(CD)之間的區(qū)別。繼續(xù)閱讀以了解有關(guān)這些做法的更多信息,看看哪一種最適合您的團(tuán)隊(duì)。
持續(xù)交付與持續(xù)部署與持續(xù)集成:有什么區(qū)別
以下是這三種做法的簡(jiǎn)要總結(jié):
- 持續(xù)集成 (CI):一旦開(kāi)發(fā)人員簽入,CI 就會(huì)執(zhí)行自動(dòng)集成、構(gòu)建和代碼測(cè)試。
- 持續(xù)交付 (CD):使用 CD,在集成、構(gòu)建和測(cè)試之后會(huì)發(fā)生自動(dòng)發(fā)布過(guò)程。
- 持續(xù)部署 (CD):通過(guò)生產(chǎn)管道的每個(gè)代碼更改都會(huì)啟動(dòng)部署,無(wú)需人工干預(yù)。
持續(xù)集成、交付和部署以多種方式重疊。CI 是持續(xù)交付和持續(xù)部署的重要組成部分。持續(xù)部署涵蓋與持續(xù)交付相同的流程,只是發(fā)布是自動(dòng)發(fā)生的。
下表比較了持續(xù)交付、持續(xù)部署和持續(xù)集成:
持續(xù)集成 | 持續(xù)交付 | 持續(xù)部署 |
具有快速反饋的全自動(dòng)集成、構(gòu)建和測(cè)試流程 | CI + 帶有手動(dòng)觸發(fā)的自動(dòng)軟件發(fā)布流程 | CI + CD + 全自動(dòng)部署到生產(chǎn) |
在開(kāi)發(fā)人員簽入后立即發(fā)生 | 交付一直進(jìn)行,直到團(tuán)隊(duì)認(rèn)為代碼已準(zhǔn)備好交付 | 所有代碼自動(dòng)直接進(jìn)入生產(chǎn)階段 |
使用單元測(cè)試 | 使用單元和業(yè)務(wù)邏輯測(cè)試 | 可以使用任何測(cè)試策略 |
需要 CI 服務(wù)器來(lái)監(jiān)控存儲(chǔ)庫(kù) | 需要強(qiáng)大的 CI 基礎(chǔ) | 需要強(qiáng)大的 CI 和良好的測(cè)試文化 |
團(tuán)隊(duì)必須為每個(gè)新功能或錯(cuò)誤修復(fù)編寫(xiě)自動(dòng)化測(cè)試 | 測(cè)試套件必須覆蓋足夠多的代碼庫(kù) | 測(cè)試套件的質(zhì)量決定了發(fā)布的質(zhì)量 |
開(kāi)發(fā)人員盡可能頻繁地合并他們的更改(至少每天一次) | 團(tuán)隊(duì)可以選擇使用功能標(biāo)志 | 功能標(biāo)志是該過(guò)程的重要組成部分 |
集成、交付和部署并不是相互排斥的。單個(gè)管道可以包含所有三種方法。許多CI/CD 工具可以幫助您設(shè)置和運(yùn)行高效的管道。
持續(xù)集成 (CI)
持續(xù)集成涉及一系列自動(dòng)步驟,這些步驟集成來(lái)自多個(gè)源的代碼、創(chuàng)建構(gòu)建和測(cè)試軟件。
CI的主要目標(biāo)是:
- 快速發(fā)布新更新
- 使獨(dú)立團(tuán)隊(duì)能夠在同一個(gè)項(xiàng)目上進(jìn)行協(xié)作
- 在潛在問(wèn)題造成損害之前識(shí)別并修復(fù)它們
CI 還可能包括將新設(shè)計(jì)概念集成到DevOps 管道中。
CI 的工作原理
CI 需要使用持續(xù)集成服務(wù)器,例如Jenkins或 Bamboo。CI 服務(wù)器自動(dòng)測(cè)試不同開(kāi)發(fā)人員編寫(xiě)的代碼。每當(dāng)一組代碼或構(gòu)建通過(guò)本地單元測(cè)試時(shí),自動(dòng)部署會(huì)將軟件帶到暫存環(huán)境。在那里,更新會(huì)經(jīng)過(guò)進(jìn)一步的測(cè)試,例如負(fù)載或手動(dòng)探索性測(cè)試。然后代碼合并到主代碼庫(kù)中。
持續(xù)集成的好處
- 在幾分鐘內(nèi)構(gòu)建、集成和測(cè)試新的代碼段
- 開(kāi)發(fā)人員在不影響代碼穩(wěn)定性的情況下獨(dú)立開(kāi)發(fā)功能
- 部署更快、更可預(yù)測(cè)
- 更少的生產(chǎn)錯(cuò)誤
- 出現(xiàn)問(wèn)題及時(shí)反饋
- 消除發(fā)布日的集成挑戰(zhàn)
- QA 團(tuán)隊(duì)在后期手動(dòng)測(cè)試上花費(fèi)的時(shí)間更少
- 鼓勵(lì)代碼透明度和代碼協(xié)作
- 更少的上下文切換
持續(xù)集成要求
- 監(jiān)控中央存儲(chǔ)庫(kù)的 CI 服務(wù)器(在本地或云端設(shè)置)
- 對(duì)每個(gè)新的改進(jìn)、功能或錯(cuò)誤修復(fù)進(jìn)行自動(dòng)化測(cè)試
持續(xù)集成最佳實(shí)踐
- 維護(hù)代碼存儲(chǔ)庫(kù)
- 始終自動(dòng)化軟件構(gòu)建
- 盡可能快地保持構(gòu)建
- 進(jìn)行自我測(cè)試構(gòu)建(持續(xù)測(cè)試)
- 對(duì)基線的提交應(yīng)該每天發(fā)生
- 在生產(chǎn)環(huán)境的克隆中運(yùn)行測(cè)試
- 輕松獲取最新的可交付成果
- 使最新構(gòu)建的結(jié)果透明
持續(xù)交付 (CD)
在 CI 之上,持續(xù)交付還在集成和構(gòu)建階段之后提供了一個(gè)自動(dòng)化的發(fā)布過(guò)程。手動(dòng)觸發(fā)器控制部署到生產(chǎn)。
CD的主要目標(biāo)是:
- 準(zhǔn)備就緒時(shí)交付新功能
- 構(gòu)建穩(wěn)定、有彈性的系統(tǒng)
- 確保業(yè)務(wù)應(yīng)用程序不間斷運(yùn)行
持續(xù)交付依賴(lài)于人類(lèi)來(lái)決定向用戶(hù)發(fā)布什么以及何時(shí)發(fā)布。部署速率取決于業(yè)務(wù)需求。
CD 的工作原理
開(kāi)發(fā)人員通過(guò) CI 流程添加改進(jìn)、功能和錯(cuò)誤修復(fù)。手動(dòng)提交后,CD 工具通過(guò)自動(dòng)部署管道獲取代碼。持續(xù)交付通常具有類(lèi)似生產(chǎn)的暫存區(qū)域,但在最終版本中存在時(shí)間滯后。延遲允許在投入生產(chǎn)之前審查并手動(dòng)接受代碼中的更改。
持續(xù)交付的好處
- 加速發(fā)布周期
- 更快的上市時(shí)間
- 準(zhǔn)備和設(shè)置版本的時(shí)間更少
- 增加迭代次數(shù)可以減少風(fēng)險(xiǎn)、縮短恢復(fù)時(shí)間并讓客戶(hù)更滿(mǎn)意
- 在交付過(guò)程的早期發(fā)現(xiàn)錯(cuò)誤
- 交付更高效、更安全
- 可預(yù)測(cè)的交付速度
- 更快的用戶(hù)反饋循環(huán)
- 開(kāi)發(fā)人員做更少的手動(dòng)工作
持續(xù)交付要求
- 強(qiáng)大的 CI 基礎(chǔ)
- 早期開(kāi)發(fā)階段的優(yōu)化
- 涵蓋足夠代碼庫(kù)的測(cè)試套件
- 功能標(biāo)志,以防止不完整的功能影響生產(chǎn)中的用戶(hù)
持續(xù)交付最佳實(shí)踐
- 確保有一個(gè)強(qiáng)大的 CI 設(shè)置支持持續(xù)交付流程
- 調(diào)整您的軟件系統(tǒng)以適應(yīng) CD,而不是相反
- 自動(dòng)化盡可能多的流程
- 使用短而寬的部署管道
- 在開(kāi)發(fā)和生產(chǎn)之間至少有一站
- 以相同的方式部署到所有環(huán)境
- 從版本控制驅(qū)動(dòng)更改
- 在管道中包含數(shù)據(jù)庫(kù)
- 監(jiān)控和記錄交付管道
持續(xù)部署 (CD)
在持續(xù)部署中,每個(gè)代碼更改都經(jīng)過(guò)一個(gè)自動(dòng)化管道,應(yīng)用程序的工作版本會(huì)自動(dòng)發(fā)布到生產(chǎn)環(huán)境。與持續(xù)交付不同,持續(xù)部署沒(méi)有發(fā)布審批周期。由于沒(méi)有手動(dòng)觸發(fā)器,此設(shè)置依賴(lài)于自動(dòng)測(cè)試以防止錯(cuò)誤到達(dá)最終用戶(hù)。持續(xù)部署的目標(biāo)是實(shí)現(xiàn)幾乎不斷發(fā)布的更新。一旦開(kāi)發(fā)人員編寫(xiě)和測(cè)試代碼,用戶(hù)就會(huì)收到更新。
持續(xù)部署的工作原理
持續(xù)交付遵循按需模型,而持續(xù)部署則自動(dòng)推動(dòng)每個(gè)部署。在合并到主線分支之前,所有測(cè)試都在類(lèi)生產(chǎn)環(huán)境中進(jìn)行。持續(xù)部署不需要用于手動(dòng)審查代碼更改的暫存區(qū)。自動(dòng)化測(cè)試發(fā)生在開(kāi)發(fā)過(guò)程的早期,并貫穿于整個(gè)發(fā)布階段。持續(xù)交付和部署之間的差異將繼續(xù)擴(kuò)大,因?yàn)橄馜ocker這樣的工具可以很容易地自動(dòng)化應(yīng)用程序部署。
持續(xù)部署的好處
- 無(wú)需人工干預(yù)的自動(dòng)部署觸發(fā)器
- 將每個(gè)新的主線添加部署到最終用戶(hù)
- 團(tuán)隊(duì)發(fā)展得更快(發(fā)布沒(méi)有暫停,手動(dòng)重復(fù)性任務(wù)更少)
- 小批量代碼使發(fā)布的風(fēng)險(xiǎn)更低,更容易修復(fù)
- 統(tǒng)一的管道集成了團(tuán)隊(duì)和流程
持續(xù)部署要求
- 一個(gè)優(yōu)秀的測(cè)試套件
- 能夠跟上部署步伐的文檔流程
- 完善的功能標(biāo)志系統(tǒng),以支持重大更改的發(fā)布
持續(xù)部署最佳實(shí)踐
- 維護(hù)一個(gè)中央代碼存儲(chǔ)庫(kù)
- 盡可能多地自動(dòng)化構(gòu)建和部署過(guò)程
- 每天承諾基線
- 使用問(wèn)題跟蹤器進(jìn)行開(kāi)發(fā)任務(wù)
- 使用包含問(wèn)題編號(hào)和所有更改描述的版本控制分支
哪種持續(xù)練習(xí)適合您?
在您考慮哪種做法最適合您之前,請(qǐng)了解您的團(tuán)隊(duì)必須擁有能夠處理 CI/CD 的 DevOps 文化。您還應(yīng)該考慮潛在的限制,例如合規(guī)法律。法規(guī)可能會(huì)阻止組織使用持續(xù)部署。
如果您的團(tuán)隊(duì)能夠支持持續(xù)流程,請(qǐng)問(wèn)自己以下問(wèn)題:
- 您的團(tuán)隊(duì)是否需要在持續(xù)集成和交付之間手動(dòng)觸發(fā)?
- 您是否能夠在未經(jīng)利益相關(guān)者批準(zhǔn)的情況下進(jìn)行部署?
- 您可以讓您的用戶(hù)了解生產(chǎn)變更嗎?
- 您對(duì)生產(chǎn)錯(cuò)誤的響應(yīng)時(shí)間是否很快?
- 您的門(mén)控要求是否允許端到端自動(dòng)化
如果您對(duì)上述問(wèn)題的回答是肯定的,那么持續(xù)部署可能是一個(gè)值得的選擇。考慮自動(dòng)化您的整個(gè)軟件交付,從代碼提交到生產(chǎn)。如果您對(duì)某些或所有問(wèn)題的回答為“否”,那么您最好從持續(xù)集成和持續(xù)交付開(kāi)始。考慮自動(dòng)創(chuàng)建生產(chǎn)就緒代碼,但需要手動(dòng)批準(zhǔn)部署。隨著時(shí)間的推移,您的團(tuán)隊(duì)可以繼續(xù)朝著軟件交付過(guò)程的持續(xù)部署和完全自動(dòng)化發(fā)展。
做出明智的商業(yè)選擇
持續(xù)的流程有助于盡可能快地構(gòu)建、測(cè)試和發(fā)布軟件,同時(shí)盡可能減少錯(cuò)誤。然而,某些方法在某些情況下比在其他情況下效果更好。團(tuán)隊(duì)必須了解持續(xù)集成、交付和部署之間的區(qū)別,才能充分利用這些實(shí)踐。現(xiàn)在您已了解每個(gè)流程提供的內(nèi)容,請(qǐng)選擇符合您需求的選項(xiàng),并輕松過(guò)渡到 DevOps。